#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //设置窗口标题
    this->setWindowTitle("简单记事本");
    //获取到菜单栏
    QMenuBar *menuBar=this->menuBar();
    //构建菜单
    QMenu *menu1=new QMenu("文件");
    //将菜单添加到菜单栏中
    menuBar->addMenu(menu1);
    //构建菜单项
    QAction *action1=new QAction("打开");
    QAction *action2=new QAction("保存");
    //向菜单中添加菜单项
    menu1->addAction(action1);
    menu1->addAction(action2);
    //构造一个纯文本输入框
    edit=new QPlainTextEdit(this);
    //构造字体类
    QFont font;
    //设置字体
    font.setPointSize(24);
    //将字体设置给文本输入框
    edit->setFont(font);
    //将此纯文本输入框添加到窗口中
    this->setCentralWidget(edit);
    //连接槽函数
    connect(action1,&QAction::triggered,this,&MainWindow::handlerAction1);
    connect(action2,&QAction::triggered,this,&MainWindow::handlerAction2);
}

MainWindow::~MainWindow()
{
    delete ui;
}
//打开功能
void MainWindow::handlerAction1()
{
    //1、弹出一个打开文件的对话框，让用户选择打开的是哪个文件
    QString path=QFileDialog::getOpenFileName(this);
    //2、将文件名显示到状态栏中
    //获取当前窗口的状态栏
    QStatusBar *statusBar=this->statusBar();
    //将状态栏设置到当前窗口
    this->setStatusBar(statusBar);
    //给状态栏中添加文本信息
    statusBar->showMessage(path);
    //3、根据用户选择的路径，构造QFile文件，并打开此文件
    QFile file(path);
    //打开文件-以只读方式打开
    bool ret=file.open(QIODevice::ReadOnly);
    if(ret==false)
    {
        //显示打开失败到状态栏
        statusBar->showMessage(path+"打开文件失败");
        return;//返回即可
    }
    //4、读取文件中的全部内容
    QString text=file.readAll();
    //这里的readAll函数会返回一个QByteArray对象，但此处可以用QString来接收，会自动进行类型转换
    //这里要注意的是：此处需要确保打开的文件是一个文本文件才可以，如果是二进制文件，交给QString类型就不合适了
    //二进制文件中存储什么样的数据都可以，对存储内容没有限制，图片、视频、音频都可以
    //文本文件里面存储的信息必须要都是合法的字符，符合utf8、gbk等编码格式
    //5、关闭文件
    file.close();
    //6、将读取到的信息打印到输入框中
    edit->setPlainText(text);
}
//保存功能
void MainWindow::handlerAction2()
{
    //1、先弹出保存文件的对话框
    QString path=QFileDialog::getSaveFileName(this);
    //2、在状态栏中显示这个文件名
    //获取状态栏
    QStatusBar *statusBar=this->statusBar();
    //设置状态栏到当前窗口
    this->setStatusBar(statusBar);
    //将文件路径设置到当前状态栏中
    statusBar->showMessage(path);
    //3、根据用户选择的路径，构造一个QFile对象，并打开文件
    //构造文件类
    QFile file(path);
    //覆盖写的方式打开这个文件
    bool ret=file.open(QFile::WriteOnly);
    if(ret==false)
    {
        statusBar->showMessage(path+"打开文件失败");
        return;
    }
    //4、将当前输入框中的数据写入到用户指定的文件中去
    //获取当前输入框中的数据
    const QString text=edit->toPlainText();
    //写入到指定文件中去,这里需要注意编码
    file.write(text.toUtf8());
    //5、关闭文件
    file.close();
}

